//package io
//
//import java.io.{BufferedWriter, File, FileWriter}
//
//import scala.collection.mutable.ArrayBuffer
//import scala.io.Source
//
///**
//  * author: HuaZhe Ray
//  *
//  * describe: 服务日志分析
//  *
//  * createDate: 2017/12/11
//  * createTime: 10:32
//  *
//  */
//object SourceRead {
//
//
//
//  val regex =  """(\d{2}-\d{2} \d{2}:\d{2}:\d{2} \d{3}) ([^\s]+) DEBUG ([^\s]+) ([^\s]+) ([^\s]+) ([^\s]+) (.+)""".r
//
//  // main 函数
//  def main(args: Array[String]): Unit = {
//    countByServiceName()
//  }
//
//  /**
//    *  最新优化，求服务调用次数  根据 带有request单词的作为一次服务，并过滤点 INFO 日志， 取 DEBUG 日志
//    *  2017-12-14 14:50
//    */
//  def countByServiceName(): Unit = {
//
//
//    val source = Source.fromFile("E:\\scala\\detail-test.log", "UTF-8")
//
//    val lists:List[(String,String,String,String,String)] = source.getLines().collect{
//      case regex(timestamp, thread,c,service,version,method,requests) => (timestamp,thread,service,method,requests)
//    }.toList
//
//    val requests:List[(String,String,String)] = lists.filter(_._5.contains("request")).map (line =>{
//      (line._1,line._2,line._3+"."+line._4)
//    })
//
//    val countByServiceName:Map[String,Int] = requests.map((_, 1)).groupBy(_._1._3).map(t=>(t._1,t._2.size))
//
//    countByServiceName.foreach {
//      case (service, count) => println(s"$service count:$count")
//    }
//
//
//  }
//
//
//
//
//
//
//
//
//
//
//
//
//
//   /**
//    * 老写法 ---> 调用次数
//    */
//  def countService(): Unit = {
//    val pattern = """\d{2}-\d{2}""".r
//    val patternSpace = """\s+""".r
//
//    val source = Source.fromFile("E:\\scala\\detail-test.log","UTF-8")
//
//    val lineIterator =  source.getLines()
//
//    val arrayBuffer = new ArrayBuffer[String]
//
//    while(lineIterator.hasNext){
//
//      val line:String = lineIterator.next
//      //判断是否以时间开头
//      val flag = pattern.findFirstIn(line) match {
//        case None => false
//        case _ => true
//      }
//
//      if(flag){
//        //以空格分隔
//        val array = patternSpace.split(line)
//
//        val re = array.filter(_.contains("com.")).filter(!_.contains("header")).map(_.replaceAll("\\(|\\)|\\:|\\[|\\]",""))
//          .map(_.split("\\@")(0))
//
//        //统计调用次数
//        arrayBuffer ++= re
//
//      }
//
//    }
//
//    val count = arrayBuffer.map((_,1)).groupBy(_._1).map(t=>(t._1,t._2.size))
//
//    for(s <- count){
//      println("服务名： " + s._1 + "    调用次数： "+ s._2 + "次")
//
//      writeLogToFile("服务名： " + s._1 + "    调用次数： "+ s._2 + "次")
//    }
//  }
//
//   /**
//    * 日志写入
//    * @param args
//    */
//  def writeLogToFile(args:String): Unit ={
//
//    val fw = new FileWriter(new File("E:\\scala\\service_count.log"),true)
//    //写入中文字符时会出现乱码
//    val bw = new BufferedWriter(fw)
//    //BufferedWriter  bw=new BufferedWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("E:\\scala\\service_count.log")), "UTF-8")));
//
//    bw.write(args + "\r\n")
//
//    bw.close()
//    fw.close()
//  }
//
//
//
//  /*def copy(): Unit = {
//    val source = Source.fromFile("E:\\scala\\detail-test.log","UTF-8")
//
//    val re = """(\d{2}-\d{2} \d{2}:\d{2}:\d{2} \d{3}) ([^\s]+) \b(DEBUG|INFO)\b ([^\s]+) ([^\s]+) ([^\s+]) [^\s+] request.*""".r
//    // (timestamp)                (thread)                   (service)(version)(method)
//
//
//    val lineIterator =  source.getLines()
//
//    val requests: List[(String, String)] = lineIterator.collect {
//
//      case re(timestamp, thread, service, version, method) => (service, method)
//
//    }.toList
//
//    requests.foreach(println)
//
//    val countByServiceName: Map[(String, String), Int] =
//      requests.map( (_, 1) )
//        .groupBy(_._1)
//        .map( t => (t._1, t._2.size) )
//
//    countByServiceName.foreach {
//      case ((service, method), count) => println(s"$service.$method count:$count")
//    }
//
//    source.close()
//  }*/
//
//}
